x86: Directly clear all pending EOIs once MSI info changed
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 26 Jan 2010 15:53:01 +0000 (15:53 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 26 Jan 2010 15:53:01 +0000 (15:53 +0000)
As to unmaskable MSI, its deferred EOI policy only targets
for avoiding IRQ storm. It should be safe to clear pending
EOIs in advance when guest irq migration occurs, because next
interrupt's EOI write is still deferred, and also can avoid
storm.

Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
xen/drivers/passthrough/io.c

index 87e5a98ddcb686f4327a73219066fc859ae5ceea..627b964b23f85a2c15e908a00cceaef41a79a075 100644 (file)
@@ -197,6 +197,8 @@ int pt_irq_create_bind_vtd(
             /* if pirq is already mapped as vmsi, update the guest data/addr */
             if ( hvm_irq_dpci->mirq[pirq].gmsi.gvec != pt_irq_bind->u.msi.gvec ||
                     hvm_irq_dpci->mirq[pirq].gmsi.gflags != pt_irq_bind->u.msi.gflags) {
+                /* Directly clear pending EOIs before enabling new MSI info. */
+                pirq_guest_eoi(d, pirq);
 
                 hvm_irq_dpci->mirq[pirq].gmsi.gvec = pt_irq_bind->u.msi.gvec;
                 hvm_irq_dpci->mirq[pirq].gmsi.gflags = pt_irq_bind->u.msi.gflags;